Load/Save File added.
[f432xdd.git] / java / Graph Editor / src / models / GraphModel.java
blob50f63a850b14366fa87539e93e3890cd83db290e
1 package models;
3 import java.io.*;
4 import java.util.List;
5 import java.util.ArrayList;
6 import java.util.Observable;
7 import java.util.Observer;
8 import java.util.Scanner;
11 public class GraphModel extends Observable implements Observer{
12 private List<GraphEdge> edges;
13 private List<GraphVertex> vertexes;
16 public GraphVertex[] getVertexes(){
17 GraphVertex[] a = new GraphVertex[vertexes.size()];
18 return vertexes.toArray(a);
20 public GraphEdge[] getEdges(){
21 GraphEdge[] a = new GraphEdge[edges.size()];
22 return edges.toArray(a);
25 public GraphModel(){
26 edges = new ArrayList<GraphEdge>();
27 vertexes = new ArrayList<GraphVertex>();
30 public synchronized void setChanged() {
31 super.setChanged();
32 notifyObservers();
35 public void addEdge(GraphEdge ... edge){
36 for(int i=0; i < edge.length; i++){
37 edges.add(edge[i]);
38 edge[i].addObserver(this);
40 setChanged();
43 public void addGraph(GraphVertex ... vertex){
44 for(int i=0; i < vertex.length; i++){
45 vertexes.add(vertex[i]);
46 vertex[i].addObserver(this);
48 setChanged();
51 public void removeEdge(GraphEdge ... edge){
52 for(int i=0; i < edge.length; i++){
53 edges.remove(edge[i]);
54 edge[i].deleteObserver(this);
56 setChanged();
58 public void removeGraph(GraphVertex ... vertex){
59 for(int i=0; i < vertex.length; i++){
60 vertexes.remove(vertex[i]);
61 vertex[i].deleteObserver(this);
63 setChanged();
66 public GraphVertex getGraphByCoordinate(int x, int y){
67 for(int i=0; i < vertexes.size(); i++){
68 if(vertexes.get(i).isAt(x, y))
69 return vertexes.get(i);
71 return null;
74 @Override
75 public void update(Observable arg0, Object arg1) {
76 if(vertexes.contains(arg0) || edges.contains(arg0)){
77 this.setChanged();
81 public void writeToFile(File file) throws Exception
83 FileOutputStream a = new FileOutputStream(file);
84 FileOutputStream fos = new FileOutputStream(file);
85 OutputStreamWriter out = new OutputStreamWriter(fos, "UTF-8");
87 out.write(vertexes.size() + " " + edges.size() + "\r\n");
88 for(int i=0; i < vertexes.size(); i++)
89 out.write(vertexes.get(i).getX() + " " + vertexes.get(i).getY() + " " + vertexes.get(i).getWidth() + " " + vertexes.get(i).getHeight() +" "+ vertexes.get(i).getName() + "\r\n");
90 for(int i=0; i < edges.size(); i++)
91 out.write(vertexes.indexOf(edges.get(i).getEdge(false)) + " " + vertexes.indexOf(edges.get(i).getEdge(true)) + "\r\n");
92 out.flush();
93 out.close();
94 fos.flush();
95 fos.close();
98 public void writeToFile(String file) throws Exception
100 writeToFile(new File(file));
103 public static GraphModel fromFile(File file) throws Exception
105 GraphModel model = new GraphModel();
106 Scanner scanner = new Scanner(file, "UTF-8");
108 int numKnopen = scanner.nextInt();
109 int numKanten = scanner.nextInt();
110 scanner.nextLine();
112 GraphVertex[] vertexes = new GraphVertex[numKanten];
113 GraphEdge[] edges = new GraphEdge[numKanten];
115 for(int i=0; i < numKnopen; i++){
116 int x = scanner.nextInt();
117 int y = scanner.nextInt();
118 int w = scanner.nextInt();
119 int h = scanner.nextInt();
120 String name = scanner.nextLine();
122 vertexes[i] = new GraphVertex(name);
123 vertexes[i].setX(x);vertexes[i].setY(y);
124 vertexes[i].setWidth(w);vertexes[i].setHeight(h);
126 for(int i=0; i < numKanten; i++){
127 int obj1 = scanner.nextInt();
128 int obj2 = scanner.nextInt();
129 edges[i] = new GraphEdge(vertexes[obj1],vertexes[obj2]);
130 if(i != (numKanten-1)){
131 scanner.nextLine();
134 model.addEdge(edges);
135 model.addGraph(vertexes);
137 return model;
141 public static GraphModel fromFile(String fileName) throws Exception
143 File file = new File(fileName);
144 return fromFile(file);